﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using QLVatTu.Class;
using System.Globalization;

namespace QLVatTu.NghiepVu
{
    public partial class frmThemPhieuXuatCongTrinhDuAn : Form
    {
        KetNoiDB cn = new KetNoiDB();
        public string MaPhieuXuat = "";
        public string PhieuDeNghiCap = "";

        public frmThemPhieuXuatCongTrinhDuAn()
        {
            InitializeComponent();
        }

        private void loadData()
        {
            cbbDoiTac.DataSource = cn.getTable("SELECT [MaDoiTac],[TenDoiTac] FROM [tbl_DoiTac]");
            cbbDoiTac.DisplayMember = "TenDoiTac";
            cbbDoiTac.ValueMember = "MaDoiTac";

            cbbKhoXuat.DataSource = cn.getTable("SELECT [MaKho],[TenKho] FROM [tbl_Kho]");
            cbbKhoXuat.DisplayMember = "TenKho";
            cbbKhoXuat.ValueMember = "MaKho";

            cbbCongTrinhDuAn.DataSource = cn.getTable("SELECT [MaCongTrinhDuAn],[TenCongTrinhDuAn] FROM [tbl_CongTrinhDuAn]");
            cbbCongTrinhDuAn.DisplayMember = "TenCongTrinhDuAn";
            cbbCongTrinhDuAn.ValueMember = "MaCongTrinhDuAn";

            cbbLoaiPhieu.DataSource = cn.getTable("SELECT [MaLoaiPhieu],[TenLoaiPhieu] FROM [tbl_LoaiPhieu] where MaLoaiPhieu='LP003'");
            cbbLoaiPhieu.DisplayMember = "TenLoaiPhieu";
            cbbLoaiPhieu.ValueMember = "MaLoaiPhieu";

            cbbXacNhan.SelectedIndex = 0;

            DataTable dt=new DataTable();

            //Load cbbPhieuDeNghi
            if (PhieuDeNghiCap == "")
            {
                dt = cn.getTable("select SoPhieu from tbl_PhieuDeNghiCap where TrangThai=1");
            }
            else
            {
                dt = cn.getTable("SELECT [SoPhieu] FROM [tbl_PhieuDeNghiCap] where SoPhieu='"+PhieuDeNghiCap+"'");
            }

            DataRow dr = dt.NewRow();
            dr["SoPhieu"] = "---Danh sách phiếu---";
            dt.Rows.InsertAt(dr, 0);
            cbbPhieuDeNghi.DataSource = dt;
            cbbPhieuDeNghi.DisplayMember = "SoPhieu";
            cbbPhieuDeNghi.ValueMember = "SoPhieu";

            string sql = "";
            if (MaPhieuXuat == "")
            {
                // Thêm 
                txtSoPhieu.Text = cn.SinhMa("SoPhieu", "tbl_PhieuXuatKho", "PX");
            }
            else
            {
                // Sửa 
                txtSoPhieu.Text = MaPhieuXuat;
                btnLuu.Enabled = true;
                cbbPhieuDeNghi.Enabled = false;
                dgvVatTuDeNghi.Enabled = false;
                ckbChonHet.Enabled = false;
                btnChon.Enabled = false;
                // Đặt trạng thái cập nhật = 1 để thiết lập trạng thái dữ liệu cập nhật
                //cn.Update_Table("tbl_ChiTietPhieuXuat", "TrangThaiCapNhat=1", "SoPhieu='" + MaPhieuXuat + "'");
                //cn.Update_Table("tbl_LuuKho", "TrangThaiCapNhat=1", "SoPhieu='" + MaPhieuXuat + "'");

                sql = @"select * from tbl_PhieuXuatKho WHERE SoPhieu = '" + MaPhieuXuat + "'";
                dt = cn.getTable(sql);
                if (dt.Rows.Count > 0)
                {
                    dtpNgayLap.Value = DateTime.Parse(dt.Rows[0]["NgayXuat"].ToString());
                    cbbDoiTac.SelectedValue = dt.Rows[0]["MaDoiTac"].ToString();
                    cbbKhoXuat.SelectedValue = dt.Rows[0]["MaKho"].ToString();
                    txtNhanVien.Text = dt.Rows[0]["NguoiXuat"].ToString();
                    txtDienGiai.Text = dt.Rows[0]["DienGiai"].ToString();
                    cbbLoaiPhieu.SelectedValue = dt.Rows[0]["MaLoaiPhieu"].ToString();
                    cbbCongTrinhDuAn.SelectedValue = dt.Rows[0]["MaCongTrinhDuAn"].ToString();

                    string MaPhieuDeNghi = dt.Rows[0]["MaPhieuDeNghi"].ToString();
                    cbbPhieuDeNghi.SelectedValue = MaPhieuDeNghi;

                    //load dgvPhieuDeNghi
                    load_PhieuDeNghi(MaPhieuDeNghi);

                    //load dgvChiTietPhieuXuat
                    DataTable dtChiTiet = new DataTable();
                    int stt = 0;
                    double SoLuongTonKho=0;
                    float SoLuongYeuCau=0;
                    float SoLuongDaCap=0;

                    sql = @"
                        SELECT     dbo.tbl_VatTu.TenVatTu as VatTu, dbo.tbl_DonViTinh.TenDonViTinh as DonViTinh, dbo.tbl_ChiTietPhieuXuat.MaVatTu, dbo.tbl_ChiTietPhieuXuat.MaDonViTinh,
                                    tbl_ChiTietPhieuXuat.SoLuong
                        FROM         dbo.tbl_ChiTietPhieuXuat INNER JOIN
                                                dbo.tbl_VatTu ON dbo.tbl_ChiTietPhieuXuat.MaVatTu = dbo.tbl_VatTu.MaVatTu INNER JOIN
                                                dbo.tbl_DonViTinh ON dbo.tbl_ChiTietPhieuXuat.MaDonViTinh = dbo.tbl_DonViTinh.MaDonViTinh
                        WHERE  dbo.tbl_ChiTietPhieuXuat.SoPhieu = '" + MaPhieuXuat + "'";
                    dtChiTiet = cn.getTable(sql);
                    if (dtChiTiet.Rows.Count > 0)
                    {
                        foreach (DataRow drct in dtChiTiet.Rows)
                        {
                            stt++;
                            DataGridViewRow dtgRowPX = (DataGridViewRow)dgvChiTietPhieuXuat.Rows[0].Clone();
                            dtgRowPX.Cells[1].Value = stt;
                            dtgRowPX.Cells[2].Value = drct["VatTu"].ToString();
                            dtgRowPX.Cells[3].Value = drct["DonViTinh"].ToString();

                            sql = "SELECT SoLuong FROM dbo.tbl_ChiTietPhieuDeNghiCap WHERE SoPhieu = '" + MaPhieuDeNghi + "' AND MaVatTu = '" + drct["MaVatTu"].ToString() + "'";
                            DataTable dtSoLuongYeuCau = cn.getTable(sql);
                            if (dtSoLuongYeuCau.Rows.Count > 0) SoLuongYeuCau = float.Parse(dtSoLuongYeuCau.Rows[0]["SoLuong"].ToString());
                            dtgRowPX.Cells[4].Value=SoLuongYeuCau;

                            sql = @"
                                SELECT	SUM(dbo.tbl_ChiTietPhieuXuat.SoLuong) as SoLuongDaCap
                                FROM         dbo.tbl_PhieuXuatKho INNER JOIN
                                                      dbo.tbl_ChiTietPhieuXuat ON dbo.tbl_PhieuXuatKho.SoPhieu = dbo.tbl_ChiTietPhieuXuat.SoPhieu
                                WHERE dbo.tbl_ChiTietPhieuXuat.SoPhieu != '" + MaPhieuXuat + "' and tbl_PhieuXuatKho.XacNhan=1 and dbo.tbl_PhieuXuatKho.MaPhieuDeNghi='" + cbbPhieuDeNghi.SelectedValue.ToString() + "' AND dbo.tbl_ChiTietPhieuXuat.MaVatTu ='" + drct["MaVatTu"].ToString() + @"'
                                GROUP BY dbo.tbl_ChiTietPhieuXuat.SoLuong
                            ";
                            DataTable dtSoLuong = cn.getTable(sql);
                            if (dtSoLuong.Rows.Count > 0) SoLuongDaCap = float.Parse(dtSoLuong.Rows[0]["SoLuongDaCap"].ToString());
                            dgvChiTietPhieuXuat.Columns[5].HeaderText = "Số lượng đã cấp trước khi lập phiếu";
                            dtgRowPX.Cells[5].Value = SoLuongDaCap;

                            //SoLuongConThieu
                            dgvChiTietPhieuXuat.Columns[6].HeaderText = "Số lượng còn thiếu trước khi lập phiếu";
                            dtgRowPX.Cells[6].Value =Math.Round((SoLuongYeuCau - SoLuongDaCap),2);

                            sql = "SELECT [TenKho] FROM [tbl_Kho] WHERE [MaKho] = '" + cbbKhoXuat.SelectedValue.ToString() + "'";
                            dtgRowPX.Cells[7].Value = cn.LayDuLieu(sql);

                            sql = @"
                                SELECT     SUM(SoLuong) as SoLuongTonKho
                                FROM         dbo.tbl_LuuKho
                                WHERE dbo.tbl_LuuKho.SoPhieu != '" + MaPhieuXuat + "' and MaKho = '" + cbbKhoXuat.SelectedValue.ToString() + "' AND MaVatTu = '" + drct["MaVatTu"].ToString() + @"'
                                GROUP BY MaKho, MaVatTu";
                            DataTable dtSoLuongTonKho = cn.getTable(sql);
                            if (dtSoLuongTonKho.Rows.Count > 0) SoLuongTonKho = float.Parse(dtSoLuongTonKho.Rows[0]["SoLuongTonKho"].ToString());

                            dgvChiTietPhieuXuat.Columns[8].HeaderText="Số lượng tồn kho trước khi lập phiếu";
                            dtgRowPX.Cells[8].Value = SoLuongTonKho;

                            dtgRowPX.Cells[9].Value=drct["SoLuong"].ToString();
                            dtgRowPX.Cells[10].Value = drct["MaVatTu"].ToString();
                            dtgRowPX.Cells[11].Value = drct["MaDonViTinh"].ToString();
                            dgvChiTietPhieuXuat.Rows.Add(dtgRowPX);
                        }
                    }
                }
            }

        }

        private void frmThemPhieuXuatCongTrinhDuAn_Load(object sender, EventArgs e)
        {
            if (cn.KetNoi())
            {
                loadData();
            }
            else
            {
                MessageBox.Show("Kết nối CSDL thất bại!");
                this.Close();
            }
        }

        private void btnThoat_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private bool IsValid()
        {
            bool kt = true;
            if (txtNhanVien.Text == "")
            {
                MessageBox.Show("Bạn chưa nhập tên nhân viên.", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                txtNhanVien.Focus();
                return false;
            }

            else if (cbbPhieuDeNghi.SelectedIndex > 0)
            {
                string sql = "select NgayYeuCau from tbl_PhieuDeNghiCap where SoPhieu='" + cbbPhieuDeNghi.SelectedValue.ToString() + "'";
                DateTime dtNgayYeuCau = DateTime.Parse(cn.LayDuLieu(sql));

                sql = "select MIN(NgayNhap) from tbl_PhieuNhapKho where XacNhan=1";
                DateTime dtNgayNhapNhoNhat = DateTime.Parse(cn.LayDuLieu(sql));

                if (dtpNgayLap.Value < dtNgayYeuCau || dtpNgayLap.Value > DateTime.Now || dtpNgayLap.Value < dtNgayNhapNhoNhat)
                {
                    MessageBox.Show("Ngày lập phiếu xuất không hợp lý", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    dtpNgayLap.Focus();
                    kt = false;
                }
            }

            else if (cbbPhieuDeNghi.SelectedValue.ToString() == "---Danh sách phiếu---")
            {
                MessageBox.Show("Bạn chưa chọn phiếu đề nghị cấp vật tư.", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                cbbPhieuDeNghi.Focus();
                return false;
            }

            else if (dgvChiTietPhieuXuat.Rows.Count == 1)
            {
                MessageBox.Show("Bạn chưa chọn nhập thông tin vật tư.", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                dgvChiTietPhieuXuat.Focus();
                return false;
            }

            foreach (DataGridViewRow dgvr in dgvChiTietPhieuXuat.Rows)
            {
                if (dgvr.IsNewRow) continue;

                if (dgvr.Cells["SoLuongCT"].Value == null)
                {
                    dgvr.Cells["SoLuongCT"].ErrorText = "Lỗi: " + dgvChiTietPhieuXuat.Columns[dgvr.Cells["SoLuongCT"].ColumnIndex].HeaderText + " chưa nhập ";
                    kt = false;
                }
                else
                {
                    string strSoLuongCT;
                    double SoLuongCT = 0;
                    string strSoLuongTonKho;
                    double SoLuongTonKho = 0;
                    string strSoLuongConThieu;
                    double SoLuongConThieu = 0;
                    if (dgvr.Cells["SoLuongCT"].Value.ToString().Contains(','))
                    {
                        strSoLuongCT = dgvr.Cells["SoLuongCT"].Value.ToString().Replace(',', '.');
                    }
                    else
                    {
                        strSoLuongCT = dgvr.Cells["SoLuongCT"].Value.ToString();
                    }

                    double.TryParse(strSoLuongCT, NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out SoLuongCT);

                    if (dgvr.Cells["SoLuongTonKho"].Value.ToString().Contains(','))
                    {
                        strSoLuongTonKho = dgvr.Cells["SoLuongTonKho"].Value.ToString().Replace(',', '.');
                    }
                    else
                    {
                        strSoLuongTonKho = dgvr.Cells["SoLuongTonKho"].Value.ToString();
                    }
                    double.TryParse(strSoLuongTonKho, NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out SoLuongTonKho);

                    if (dgvr.Cells["SoLuongConThieu"].Value.ToString().Contains(','))
                    {
                        strSoLuongConThieu = dgvr.Cells["SoLuongConThieu"].Value.ToString().Replace(',', '.');
                    }
                    else
                    {
                        strSoLuongConThieu = dgvr.Cells["SoLuongConThieu"].Value.ToString();
                    }
                    double.TryParse(strSoLuongConThieu, NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out SoLuongConThieu);

                    if (SoLuongCT <= 0)
                    {
                        dgvr.Cells["SoLuongCT"].ErrorText = "Lỗi: " + dgvChiTietPhieuXuat.Columns[dgvr.Cells["SoLuongCT"].ColumnIndex].HeaderText + " phải là số và không được nhỏ hơn hoặc bằng 0 ";
                        kt = false;
                    }
                    else
                    {
                        if (SoLuongTonKho <= 0)
                        {
                            dgvr.Cells["SoLuongTonKho"].ErrorText = "Lỗi: " + dgvChiTietPhieuXuat.Columns[dgvr.Cells["SoLuongTonKho"].ColumnIndex].HeaderText + " không đủ điều kiện đáp ứng xuất ";
                            kt = false;
                        }
                        else
                        {
                            dgvr.Cells["SoLuongTonKho"].ErrorText = "";
                        }

                        if (SoLuongCT > SoLuongTonKho || SoLuongCT > SoLuongConThieu)
                        {
                            dgvr.Cells["SoLuongCT"].ErrorText = "Lỗi: " + dgvChiTietPhieuXuat.Columns[dgvr.Cells["SoLuongCT"].ColumnIndex].HeaderText + " phải nhỏ hơn số lượng tồn kho và số lượng còn thiếu ";
                            kt = false;
                        }
                        else
                        {
                            dgvr.Cells["SoLuongCT"].ErrorText = "";
                        }
                    }
                }
            }
            return kt;
        }

        private void load_ChietTietPhieuXuat()
        {
            dgvChiTietPhieuXuat.Rows.Clear();
            int stt = 0;
            string sql = "";
            double SoLuongTonKho = 0;
            DataTable dt = new DataTable();
            float SoLuongYeuCau = 0;
            float SoLuongDaCap = 0;
            float SoLuongConThieu=0;

            foreach (DataGridViewRow dgvr in dgvVatTuDeNghi.Rows)
            {
                if (dgvr.IsNewRow) continue;
                if (dgvr.Cells[0].Value != null && bool.Parse(dgvr.Cells[0].Value.ToString()) == true && dgvr.Cells["VatTu"].Value != null)
                {
                    stt++;
                    DataGridViewRow dtgRowPX = (DataGridViewRow)dgvChiTietPhieuXuat.Rows[0].Clone();
                    dtgRowPX.Cells[1].Value = stt;
                    dtgRowPX.Cells[2].Value = dgvr.Cells["VatTu"].Value.ToString();
                    dtgRowPX.Cells[3].Value = dgvr.Cells["DonViTinh"].Value.ToString();

                    //load số lượng còn thiếu
                    SoLuongYeuCau = float.Parse(dgvr.Cells["SoLuongYeuCau"].Value.ToString());
                    SoLuongDaCap = float.Parse(dgvr.Cells["SoLuongDaCap"].Value.ToString());
                    dtgRowPX.Cells[4].Value=dgvr.Cells["SoLuongYeuCau"].Value.ToString();
                    dtgRowPX.Cells[5].Value=dgvr.Cells["SoLuongDaCap"].Value.ToString();

                    SoLuongConThieu = (SoLuongYeuCau - SoLuongDaCap);
                    if (SoLuongConThieu <= 0)
                    {
                        continue;
                    }
                    else
                    {
                        dtgRowPX.Cells[6].Value=SoLuongConThieu;
                    }

                    //load tên kho
                    sql = "SELECT [TenKho] FROM [tbl_Kho] WHERE [MaKho] = '" + cbbKhoXuat.SelectedValue.ToString() + "'";
                    dtgRowPX.Cells[7].Value = cn.LayDuLieu(sql);

                    //lấy số lượng tồn trong kho của vật tư
                    sql = @"
                                SELECT     SUM(SoLuong) as SoLuongTonKho
                                FROM         dbo.tbl_LuuKho
                                WHERE MaKho = '" + cbbKhoXuat.SelectedValue.ToString() + "' AND MaVatTu = '" + dgvr.Cells["MaVatTu"].Value.ToString() + @"'
                                GROUP BY MaKho, MaVatTu";
                    dt = cn.getTable(sql);
                    if (dt.Rows.Count > 0) SoLuongTonKho = float.Parse(dt.Rows[0]["SoLuongTonKho"].ToString());

                    if (SoLuongTonKho == 0)
                    {
                        continue;
                    }
                    else
                    {
                        dtgRowPX.Cells[8].Value = SoLuongTonKho;
                    }

                    //tính số lượng cần xuất
                    if (SoLuongTonKho < Math.Round((SoLuongYeuCau - SoLuongDaCap),2))
                    {
                        dtgRowPX.Cells[9].Value = SoLuongTonKho;
                    }
                    else
                    {
                        dtgRowPX.Cells[9].Value = Math.Round((SoLuongYeuCau - SoLuongDaCap),2);
                    }
                    dtgRowPX.Cells[10].Value = dgvr.Cells["MaVatTu"].Value.ToString();
                    dtgRowPX.Cells[11].Value = dgvr.Cells["MaDonViTinh"].Value.ToString();

                    if (SoLuongDaCap == SoLuongYeuCau)
                    {
                        continue;
                    }

                    dgvChiTietPhieuXuat.Rows.Add(dtgRowPX);

                    foreach (DataGridViewRow dgvrCTX in dgvChiTietPhieuXuat.Rows)
                    {
                        if (dgvrCTX.IsNewRow) continue;
                        dgvrCTX.Cells[0].Value = false;
                    }
                }
            }
        }

        private void dgvVatTuDeNghi_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            if (dgvVatTuDeNghi.RowCount > 0 && e.ColumnIndex == 0) 
            {
                if (!dgvVatTuDeNghi.Rows[e.RowIndex].IsNewRow && dgvVatTuDeNghi.Rows[e.RowIndex].Cells[0].Value != null)
                {
                    bool Checked = bool.Parse(dgvVatTuDeNghi.Rows[e.RowIndex].Cells[0].Value.ToString());
                    dgvVatTuDeNghi.Rows[e.RowIndex].Cells[0].Value = !Checked;
                    dgvVatTuDeNghi.EndEdit();
                }
            }
        }

        private void btnLuu_Click(object sender, EventArgs e)
        {
            if (IsValid())
            {
                string SoPhieu = txtSoPhieu.Text;
                string NgayXuat = dtpNgayLap.Value.ToString("yyyy-MM-dd");
                string MaDoiTac = cbbDoiTac.SelectedValue.ToString();
                string MaKho = cbbKhoXuat.SelectedValue.ToString();
                string NguoiXuat = txtNhanVien.Text.Trim();
                string DienGiai = txtDienGiai.Text.Trim();
                string MaLoaiPhieu = cbbLoaiPhieu.SelectedValue.ToString();
                string MaCongTrinhDuAn = cbbCongTrinhDuAn.SelectedValue.ToString();
                string MaPhieuDeNghi = cbbPhieuDeNghi.SelectedValue.ToString();
                byte XacNhan = 0;
                if (cbbXacNhan.Text == "Đã xác nhận")
                {
                    XacNhan = 1;
                }
                string MaVatTu;
                string MaDonViTinh;

                string strSoLuong="";
                double SoLuong = 0;

                string sql = "";

                DataTable dt = new DataTable();
                if (MaPhieuXuat == "")
                {
                    cn.Insert_Table("tbl_PhieuXuatKho", "SoPhieu,NgayXuat,MaDoiTac,MaKho,NguoiXuat,DienGiai,MaLoaiPhieu,MaCongTrinhDuAn,XacNhan,MaPhieuDeNghi", "'"
                                    + SoPhieu + "','" + NgayXuat + "','" + MaDoiTac + "','" + MaKho + "',N'" + NguoiXuat + "',N'" + DienGiai + "','"
                                    + MaLoaiPhieu + "','" + MaCongTrinhDuAn + "','"+XacNhan+"','" + MaPhieuDeNghi + "'");


                    foreach (DataGridViewRow dgvr in dgvChiTietPhieuXuat.Rows)
                    {
                        if (dgvr.IsNewRow) continue;

                        MaVatTu = dgvr.Cells["MaVatTuCT"].Value.ToString();
                        MaDonViTinh = dgvr.Cells["MaDonViTinhCT"].Value.ToString();

                        if (dgvr.Cells["SoLuongCT"].Value.ToString().Contains(','))
                        {
                            strSoLuong = dgvr.Cells["SoLuongCT"].Value.ToString().Replace(',', '.');
                        }
                        else
                        {
                            strSoLuong = dgvr.Cells["SoLuongCT"].Value.ToString();
                        }
                        double.TryParse(strSoLuong, NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out SoLuong);

                        cn.Insert_Table("tbl_ChiTietPhieuXuat", "SoPhieu,MaVatTu,MaDonViTinh,SoLuong,SoLuongPhePham", "'" + SoPhieu + "','" + MaVatTu + "','" + MaDonViTinh + "','" + SoLuong.ToString().Replace(",", ".") + "',0");

                        if (XacNhan == 1)
                        {
                            double SoLuongXuat = -SoLuong;
                            cn.Insert_Table("tbl_LuuKho", "SoPhieu,MaKho,MaVatTu,SoLuong,SoLuongPhePham,NgayCapNhat", "'" + SoPhieu + "','" + MaKho + "','" + MaVatTu + "','" + SoLuongXuat.ToString().Replace(",", ".") + "','0','" + NgayXuat + "'");
                        }
                    }
                    HangSo.Luu_Hanh_Dong(HangSo.TenDangNhap, HangSo.TenQuyenHan, HangSo.TenNguoiDung, "Thêm phiếu xuất đơn vị sản xuất.");
                    MessageBox.Show("Thêm phiếu thành công");
                }
                else
                {
                    cn.Update_Table("tbl_PhieuXuatKho", "NgayXuat='" + NgayXuat + "',MaDoiTac='" + MaDoiTac
                                    + "',MaKho='" + MaKho + "',NguoiXuat=N'" + NguoiXuat + "',DienGiai=N'" + DienGiai
                                    + "',MaLoaiPhieu='" + MaLoaiPhieu + "',MaCongTrinhDuAn='" + MaCongTrinhDuAn
                                    + "',XacNhan='"+XacNhan+"',MaPhieuDeNghi='" + MaPhieuDeNghi + "'", "SoPhieu='" + SoPhieu + "'");

                    cn.Delete_Table("tbl_ChiTietPhieuXuat", "SoPhieu ='" + SoPhieu + "'");
                    cn.Delete_Table("tbl_LuuKho", "SoPhieu ='" + SoPhieu + "'");

                    foreach (DataGridViewRow dgvr in dgvChiTietPhieuXuat.Rows)
                    {
                        if (dgvr.IsNewRow) continue;

                        MaVatTu = dgvr.Cells["MaVatTuCT"].Value.ToString();
                        MaDonViTinh = dgvr.Cells["MaDonViTinhCT"].Value.ToString();

                        if (dgvr.Cells["SoLuongCT"].Value.ToString().Contains(','))
                        {
                            strSoLuong = dgvr.Cells["SoLuongCT"].Value.ToString().Replace(',', '.');
                        }
                        else
                        {
                            strSoLuong = dgvr.Cells["SoLuongCT"].Value.ToString();
                        }
                        double.TryParse(strSoLuong, NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out SoLuong);

                        cn.Insert_Table("tbl_ChiTietPhieuXuat", "SoPhieu,MaVatTu,MaDonViTinh,SoLuong,SoLuongPhePham", "'" + SoPhieu + "','" + MaVatTu + "','" + MaDonViTinh + "','" + SoLuong.ToString().Replace(",", ".") + "',0");

                        if (XacNhan == 1)
                        {
                            double SoLuongXuat = -SoLuong;
                            cn.Insert_Table("tbl_LuuKho", "SoPhieu,MaKho,MaVatTu,SoLuong,SoLuongPhePham,NgayCapNhat", "'" + SoPhieu + "','" + MaKho + "','" + MaVatTu + "','" + SoLuongXuat.ToString().Replace(",", ".") + "','0','" + NgayXuat + "'");
                        }
                    }
                    HangSo.Luu_Hanh_Dong(HangSo.TenDangNhap, HangSo.TenQuyenHan, HangSo.TenNguoiDung, "Cấp nhật phiếu xuất đơn vị sản xuất.");
                    MessageBox.Show("Cập nhật thành công");
                }
                this.Close();
            }
        }

        private void btnHuy_Click(object sender, EventArgs e)
        {
            dgvChiTietPhieuXuat.Rows.Clear();
        }

        private void load_PhieuDeNghi(string MaPhieuDeNghi)
        {
            cbbDoiTac.SelectedValue = cn.LayDuLieu("SELECT  MaDonViSanXuat FROM dbo.tbl_PhieuDeNghiCap WHERE SoPhieu = '" + MaPhieuDeNghi + "'");
            cbbCongTrinhDuAn.SelectedValue = cn.LayDuLieu("SELECT MaCongTrinhDuAn FROM dbo.tbl_PhieuDeNghiCap WHERE SoPhieu = '" + MaPhieuDeNghi + "'");
            string sql = @"
                        SELECT     ROW_NUMBER() over(order by dbo.tbl_ChiTietPhieuDeNghiCap.SoPhieu) as STT, dbo.tbl_VatTu.TenVatTu, dbo.tbl_DonViTinh.TenDonViTinh as DonViTinh, dbo.tbl_ChiTietPhieuDeNghiCap.SoLuong as SoLuongYeuCau,tbl_ChiTietPhieuDeNghiCap.MaVatTu,tbl_ChiTietPhieuDeNghiCap.MaDonViTinh
                        FROM         dbo.tbl_ChiTietPhieuDeNghiCap INNER JOIN
                                              dbo.tbl_DonViTinh ON dbo.tbl_ChiTietPhieuDeNghiCap.MaDonViTinh = dbo.tbl_DonViTinh.MaDonViTinh INNER JOIN
                                              dbo.tbl_VatTu ON dbo.tbl_ChiTietPhieuDeNghiCap.MaVatTu = dbo.tbl_VatTu.MaVatTu INNER JOIN
                                              dbo.tbl_PhieuDeNghiCap ON dbo.tbl_ChiTietPhieuDeNghiCap.SoPhieu = dbo.tbl_PhieuDeNghiCap.SoPhieu
                        WHERE  dbo.tbl_PhieuDeNghiCap.SoPhieu = '" + MaPhieuDeNghi + "'";
            DataTable dt = cn.getTable(sql);
            dgvVatTuDeNghi.Rows.Clear();
            ckbChonHet.Checked = false;
            dgvChiTietPhieuXuat.Rows.Clear();
            if (dt.Rows.Count > 0)
            {
                foreach (DataRow dr in dt.Rows)
                {
                    DataGridViewRow dtgRow = (DataGridViewRow)dgvVatTuDeNghi.Rows[0].Clone();
                    dtgRow.Cells[1].Value = dr["STT"].ToString();
                    dtgRow.Cells[2].Value = dr["TenVatTu"].ToString();
                    dtgRow.Cells[3].Value = dr["DonViTinh"].ToString();
                    dtgRow.Cells[4].Value = dr["SoLuongYeuCau"].ToString();
                    float SoLuongDaCap = 0;
                    sql = @"
                            SELECT	dbo.tbl_ChiTietPhieuXuat.MaVatTu, SUM(dbo.tbl_ChiTietPhieuXuat.SoLuong) as SoLuongDaCap
                            FROM         dbo.tbl_PhieuXuatKho INNER JOIN
                                                  dbo.tbl_ChiTietPhieuXuat ON dbo.tbl_PhieuXuatKho.SoPhieu = dbo.tbl_ChiTietPhieuXuat.SoPhieu
                            WHERE dbo.tbl_PhieuXuatKho.MaPhieuDeNghi='" + cbbPhieuDeNghi.SelectedValue.ToString() + "' and tbl_PhieuXuatKho.XacNhan=1 AND dbo.tbl_ChiTietPhieuXuat.MaVatTu ='" + dr["MaVatTu"].ToString() + @"'
                            GROUP BY dbo.tbl_ChiTietPhieuXuat.MaVatTu
                        ";
                    DataTable dtSoLuong = cn.getTable(sql);
                    if (dtSoLuong.Rows.Count == 1)
                    {
                        SoLuongDaCap = float.Parse(dtSoLuong.Rows[0]["SoLuongDaCap"].ToString());
                    }
                    dtgRow.Cells[5].Value = SoLuongDaCap;
                    dtgRow.Cells[6].Value = dr["MaVatTu"].ToString();
                    dtgRow.Cells[7].Value = dr["MaDonViTinh"].ToString();
                    dgvVatTuDeNghi.Rows.Add(dtgRow);
                }
            }
            foreach (DataGridViewRow dgvr in dgvVatTuDeNghi.Rows)
            {
                if (dgvr.IsNewRow) continue;
                dgvr.Cells[0].Value = ckbChonHet.Checked;
            }
        }

        private void cbbPhieuDeNghi_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (cbbPhieuDeNghi.SelectedValue != null)
            {
                load_PhieuDeNghi(cbbPhieuDeNghi.SelectedValue.ToString());
            }
            else
            {
                dgvVatTuDeNghi.Rows.Clear();
            }
        }

        private void frmThemPhieuXuatCongTrinhDuAn_FormClosing(object sender, FormClosingEventArgs e)
        {
            //if (MaPhieuXuat != "")
            //{
            //    // Đặt trạng thái cập nhật = 0 để xóa trạng thái dữ liệu cập nhật
            //    cn.Update_Table("tbl_ChiTietPhieuXuat", "TrangThaiCapNhat=0", "SoPhieu='" + MaPhieuXuat + "'");
            //    cn.Update_Table("tbl_LuuKho", "TrangThaiCapNhat=0", "SoPhieu='" + MaPhieuXuat + "'");
            //} 
        }

        private void ckbChonHet_Click(object sender, EventArgs e)
        {
            if (dgvVatTuDeNghi.RowCount > 0)
            {
                foreach (DataGridViewRow dgvr in dgvVatTuDeNghi.Rows)
                {
                    if (dgvr.IsNewRow) continue;
                    dgvr.Cells[0].Value = ckbChonHet.Checked;
                }
                dgvVatTuDeNghi.EndEdit();
            }
        }

        private void btnChon_Click(object sender, EventArgs e)
        {
            if (cbbKhoXuat.SelectedValue == null)
            {
                MessageBox.Show("Bạn chưa chọn kho xuất.", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                cbbKhoXuat.Focus();
            }
            else
            {
                load_ChietTietPhieuXuat();
            }
        }

        private void btnXoaChon_Click(object sender, EventArgs e)
        {
            for (int i = dgvChiTietPhieuXuat.Rows.Count - 1; i >= 0; i--)
            {
                if (dgvChiTietPhieuXuat.Rows[i].Cells[0].Value != null)
                {
                    dgvChiTietPhieuXuat.Rows.RemoveAt(i);
                }
            }
        }

        private void cbbKhoXuat_SelectedIndexChanged(object sender, EventArgs e)
        {
            load_ChietTietPhieuXuat();
        }

    }
}
